package com.jackchen.common.i18n;

import java.io.StringReader;  
import java.util.Iterator;  
import java.util.List;  
import org.dom4j.Document;  
import org.dom4j.DocumentException;  
import org.dom4j.DocumentHelper;  
import org.dom4j.Element;  
import org.dom4j.io.SAXReader;

/**
 * 解析从数据库里面存储的xml格式字符串
 */
public class XmlLanguageParser {

	private Document xmlDocument;

	/**
	 * 要解析的XML文档内容
	 * 
	 * @param xmlContent
	 */
	public XmlLanguageParser(String xmlContent) {
		createDocument(xmlContent);
	}

	/**
	 * 建立空白的XML文档
	 */
	public XmlLanguageParser() {
		createDocument("");
	}

	/**
	 * 根据语言编号获得对应的文本信息，若无该语言对应的文本，返回NULL
	 * 
	 * @param languageCode
	 * @return
	 */
	public String getString(String languageCode) {
		if (this.xmlDocument == null) {
			return null;
		}
		// 获得所有的文本结点
		List list = xmlDocument.selectNodes("//items/item");
		if (list == null)
			return null;
		// 获得迭代器
		Iterator iterator = list.iterator();
		// 查找语言编号对应的XML元素
		while (iterator.hasNext()) {
			Element element = (Element) iterator.next();
			// 如果存在，则返回XML元素的文本值
			if (element.attributeValue("lang").equals(languageCode)) {
				return element.getText();
			}
		}
		return null;
	}

	/**
	 * 设置语言编号对应的文本内容，若该语言不存在，则添加
	 * 
	 * @param languageCode
	 * @param content
	 */
	public void setString(String languageCode, String content) {
		List list = xmlDocument.selectNodes("//items/item");
		Iterator iterator = list.iterator();
		boolean isExist = false;
		while (iterator.hasNext()) {
			Element element = (Element) iterator.next();
			String lang = element.attributeValue("lang");
			if (lang.equals(languageCode)) {
				element.setText(content);
				isExist = true;
				break;
			}
		}
		if (!isExist) {
			Element items = xmlDocument.getRootElement();
			Element item = items.addElement("item");
			item.addAttribute("lang", languageCode);
			item.setText(content);
		}
	}

	/**
	 * 返回文本的XML格式的内容
	 * 
	 * @return
	 */
	public String getXmlContent()  
    {  
        String removeString="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";  
        return this.xmlDocument.asXML().substring(removeString.length()+1);  
    }
	/**
	 * 创建XML文档
	 * 
	 * @throws DocumentException
	 */
	private void createDocument(String xmlContent) {
		if (xmlContent == null)
			xmlContent = "";
		// 没有创建XML文档才创建
		if (this.xmlDocument == null) {
			if (xmlContent.trim() != "") {
				SAXReader reader = new SAXReader();
				try {
					StringReader sr = new StringReader(xmlContent);
					this.xmlDocument = reader.read(sr);
				} catch (DocumentException e) {
					e.printStackTrace();
				}
			} else {
				this.xmlDocument = DocumentHelper.createDocument();
				xmlDocument.addElement("items");
			}
		}
	}

}
